package com.bdqn.qnnews.articel.api.feign;

import com.bdqn.qnnews.articel.api.config.ArticleFeignConfig;
import com.bdqn.qnnews.articel.api.dto.ApArticleDto;
import com.bdqn.qnnews.articel.api.dto.ApAuthorDto;
import com.bdqn.qnnews.articel.api.fallback.ApArticleAuthorFeignFallback;
import com.bdqn.qnnews.common.base.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * Feign接口注意实现：
 *  name: 需要调用的服务名称
 *  path: 统一访问路径
 *   1）所有形参都必须添加注解！！！(不能省略注解）
 * @author xlzhang
 */
@FeignClient(name = "qnnews-article-service",path = "/api/v1",
        configuration = ArticleFeignConfig.class,
        fallbackFactory = ApArticleAuthorFeignFallback.class)
public interface ArticleFeignClient {

    /**
     * 查询所有 app文章列表数据
     * @return
     */
    @GetMapping("/article/all")
    public R<List<ApArticleDto>> findAllArticles();

    /**
     * 保存或更新文章
     * @param dto 文章数据
     * @return 统一响应对象
     */
    @PostMapping("/article/save")
    public R<Long> saveAndUpdate(@RequestBody ApArticleDto dto);

    /**
     * 根据app用户id查询文章作者信息
     * @param userId 用户id
     * @return
     */
    @GetMapping("/author")
    public R<ApAuthorDto> getByApUserId(@RequestParam("apUserId") Long userId);

    /**
     * 新增 APP文章作者信息表
     * @param apAuthorDto APP用户微服务传入的用户信息
     * @return Result
     */
    @PostMapping("/author")
    public R<String> save(@RequestBody ApAuthorDto apAuthorDto);

}
